package shader

import (
	"github.com/go-gl/gl/v2.1/gl"
	"strings"
	"fmt"
)

func CompileShader(source string, shaderType uint32) (uint32, error) {
	shader := gl.CreateShader(shaderType)
	csources, free := gl.Strs(source)
	//glShaderSource函数把要编译的着色器对象作为第一个参数。
	// 第二参数指定了传递的源码字符串数量，这里只有一个。
	// 第三个参数是顶点着色器真正的源码，第四个参数我们先设置为NULL
	gl.ShaderSource(shader, 1, csources, nil)
	free()
	gl.CompileShader(shader)
	var status int32
	gl.GetShaderiv(shader, gl.COMPILE_STATUS, &status)
	if status == gl.FALSE {
		var logLength int32
		gl.GetShaderiv(shader, gl.INFO_LOG_LENGTH, &logLength)
		log := strings.Repeat("\x00", int(logLength+1))
		gl.GetShaderInfoLog(shader, logLength, nil, gl.Str(log))
		return 0, fmt.Errorf("failed to compile %v: %v", source, log)
	}
	return shader, nil
}
